package cn.tedu._03vehicle.controller;

import cn.tedu._03vehicle.base.response.JsonResult;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/v1/file/")
@Api(tags = "04.文件上传模块")
public class UploadController {
    @PostMapping("upload")
    @ApiOperation("上传文件功能")
    @ApiOperationSupport(order = 10)
    public JsonResult upload(MultipartFile file){//接收客户端传递的文件
        log.debug("开始处理上传请求");
        //获取原始的文件名
        String originalFilename = file.getOriginalFilename();
        log.debug("原始文件名:"+originalFilename);
        //获取文件名后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        log.debug("原始文件的后缀:"+suffix);
        //图片名可能是会重复的，生成一个全球唯一的文件名，全球唯一字符串
        UUID uuid = UUID.randomUUID();
        log.debug("全球唯一字符串:"+uuid);
        originalFilename = uuid+suffix;
        log.debug("修改后的文件名:"+originalFilename);
        //自定义一个日期格式路径：/yyyy/MM/dd/
        //这个方法可以将指定的时间，转换成指定格式的字符串
        SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
        String datePath = sdf.format(new Date());
        //定义一个静态资源的路径
        String staticPath = "d:/files";
        log.debug("日期路径:"+datePath);
        //创建目录
        File file1 = new File(staticPath + datePath);
        if (!file1.exists()){//如果目录不存在，就创建
            file1.mkdirs();//创建多级目录
        }
        //完整路径
        String fullPath = staticPath + datePath + originalFilename;
        //保存文件
        try {
            file.transferTo(new File(fullPath));
        } catch (Exception e) {
            e.printStackTrace();
        }
        //返回响应[文件保存的完整的路径]
        return JsonResult.ok(datePath+originalFilename);
    }
}
